package com.nowcoder.community.util;

/**
 * 工具类
 * 生成相应的key
 */
public class RedisKeyUtil {
    private static final String SPLIT = ":";
    private static final String PREFIX_ENTITY_LIKE= "like:entity";
    private static final String PREFIX_USER_LIKE= "like:user";
    private static final String PREFIX_FOLLOWER = "follower";
    private static final String PREFIX_FOLLOWEE = "followee";
    private static final String PREFIX_KAPTCHA = "kaptcha";
    private static final String PREFIX_CODE = "code";
    private static final String PREFIX_TICKET = "ticket";
    private static final String PREFIX_USER = "user";
    private static final String PREFIX_UV = "uv";
    private static final String PREFIX_DAU = "dau";
    private static final String PREFIX_POST = "post";
    //某个实体的赞
    //like:entity:entityType:entityId -> set(userId)
    public static String getEntityLikeKey(int entityType,int entityId){
        return  PREFIX_ENTITY_LIKE + SPLIT + entityType + SPLIT + entityType + SPLIT + entityId;
    }

    //某个用户的赞  like：user:userId
    public static String getUserLikeKey(int userId){
        return PREFIX_USER_LIKE + SPLIT + userId;
    }
    //某个用户关注实体 followee:userId：entityType -> zset(entityId,now)  实体被关注行为
    public static String getFolloweeKey(int userId,int entityType){
        return PREFIX_FOLLOWEE + SPLIT + userId +SPLIT + entityType;
    }
    //某个实体拥有的粉丝 follower：entityType：entityId ->zset(userId,now)  用户关注行为
    public static String getFollowerKey(int entityType,int entityId){
        return PREFIX_FOLLOWER + SPLIT + entityType + SPLIT + entityId;
    }

    //登陆验证码 kaptchar:owner
    public static String getKaptchaKey(String owner){
        return PREFIX_KAPTCHA +SPLIT+owner;
    }

    //登录凭证 ticket:ticket
    public static String getTicketKey(String ticket){
        return  PREFIX_TICKET + SPLIT + ticket;
    }
    //用户
    public static String getUserKey(int userId){
        return PREFIX_USER + SPLIT + userId;
    }
    // 单日UV，记录UV是以天为单位的
    public static String getUVKey(String date){
        return PREFIX_UV + SPLIT + date;
    }
    // 区间UV，查看一周的UV  在hyperloglog中进行合并 产生的数据会产生一个新的key
    public static String getUVKey(String startDate, String endDate){
        return PREFIX_UV + SPLIT + startDate + SPLIT + endDate;
    }

    //单日活跃用户
    public static String getDAUKey(String date){
        return PREFIX_DAU + SPLIT + date;
    }

    //区间活跃用户 同上
    public static String getDAUKey(String startDate, String endDate){
        return PREFIX_DAU + SPLIT  + startDate + SPLIT + endDate;
    }

    //帖子分数
    public static String getPostScoreKey(){
        return PREFIX_POST + SPLIT  + "score";
    }


    public static String getCodeKey(String owner) {
        return PREFIX_CODE + SPLIT + owner;
    }
}
